package com.hwd.srb.sms.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.hwd.srb.common.constant.Constants;
import com.hwd.srb.sms.service.FileService;
import com.hwd.srb.sms.util.OssProperties;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.io.InputStream;
import java.util.UUID;

/**
 * @author 黄伟东/Victor
 * @date 2022/3/16 16:43
 * @Description
 */
@Service
@Slf4j
public class FileServiceImpl implements FileService {

    /**
     * 上传文件到阿里云中，返回阿里云文件的绝对路径
     *
     * @param inputStream      文件流
     * @param module           模块名
     * @param originalFilename 原始文件名
     * @return java.lang.String 阿里云文件的绝对路径 http://桶名.节点名/文件名
     */
    @Override
    public String upload(InputStream inputStream, String module, String originalFilename) {

        // 创建ossClient实例
        OSS ossClient = new OSSClientBuilder().build(
                OssProperties.ENDPOINT,
                OssProperties.KEY_ID,
                OssProperties.KEY_SECRET
        );

        // 拼接企业的Key 生成规则：模块 / 日期目录 / 随机文件名
        String datetime = new DateTime().toString(Constants.DATE_SLASH_FORMAT);
        String fileName = UUID.randomUUID().toString() + "." + StringUtils.getFilenameExtension(originalFilename);
        String key = module + "/" + datetime + "/" + fileName;

        // 文件上传到阿里云
        log.info("开始上传文件");
        ossClient.putObject(OssProperties.BUCKET_NAME, key, inputStream);

        // 关闭OSSClient。
        ossClient.shutdown();

        String uploadURL = Constants.HTTPS + OssProperties.BUCKET_NAME + "." + OssProperties.ENDPOINT + "/" + key;
        log.info("文件已上传到阿里云，URL = " + uploadURL);

        return uploadURL;
    }

    /**
     * 在阿里云中删除指定url的文件
     *
     * @param url 删除文件的url
     */
    @Override
    public void removeFile(String url) {
        // 全路径url= https://hwd-srb-oss.oss-cn-shenzhen.aliyuncs.com/b/2022/03/16/5308a367-15fb-4635-8cf4-6f7dd97a3b24.jpeg
        // 全路径去掉前缀(https://hwd-srb-oss.oss-cn-shenzhen.aliyuncs.com/)

        String urlPrefix = Constants.HTTPS + OssProperties.BUCKET_NAME + "." + OssProperties.ENDPOINT + "/";
        String key = url.substring(urlPrefix.length());

        // 创建ossClient实例
        OSS ossClient = new OSSClientBuilder().build(OssProperties.ENDPOINT, OssProperties.KEY_ID, OssProperties.KEY_SECRET);

        // 执行删除阿里云文件
        log.info("开始执行删除文件");
        ossClient.deleteObject(OssProperties.BUCKET_NAME,key);

        ossClient.shutdown();
    }
}
